/* Copyright 2011 Massimo Gengarelli <gengarel@cs.unibo.it>
* This file is part of Floz Configurator.
* Floz Configurator is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Floz Configurator is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Floz Configurator. If not, see http://www.gnu.org/licenses/.
*/
package it.unibo.cs.v2.client;
import it.unibo.cs.v2.servlets.GetUserInfo;
import it.unibo.cs.v2.servlets.GetUserInfoAsync;
import java.util.HashMap;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class FlozConfigurator extends DockLayoutPanel implements EntryPoint {
public FlozConfigurator() {
super(Unit.EM);
}
private final String COPYRIGHT = "<b>Live ShockVM is part of the VirtuaCluster, "
+ "Copyright (C) 2011 - Massimo Gengarelli "
+ "<gengarel@cs.unibo.it></b>";
private final HTML footerHTML = new HTML("<div id=\"footer\">" + COPYRIGHT + "</div>");
private GetUserInfoAsync userInfoProxy = (GetUserInfoAsync) GWT.create(GetUserInfo.class);
private HashMap<String, String> userInfo;
/**
* It's nice to keep'em in memory for low-costs accesses
*/
private MainPage mainPage;
private MainPanel leftPanel;
/**
* Points to the widget that is set in the center of the DockLayoutPanel
*/
private Panel centerWidget;
/**
* This is called by the GWT EntryPoint interface
*/
@Override
public void onModuleLoad() {
History.newItem(HistoryTokens.START, false);
getElement().setAttribute("id", "mainPanel");
addNorth(new HTML("<div id=\"Header\"> "
+ "<h1>Live ShockVM</h1>" + "</div>"), 6);
footerHTML.getElement().getStyle().setMarginTop(3, Unit.EM);
addSouth(footerHTML, 4);
RootLayoutPanel.get().add(this);
showLoginTable();
}
/**
* Shows a nice Login form
*/
private void showLoginTable() {
final LoginPage login = new LoginPage();
centerWidget = (Panel) login;
centerWidget.getElement().setAttribute("id", "loginPage");
final Image loadingImage = new Image("/loading.gif");
login.add(loadingImage);
login.setAsyncCallback(new Loader<Boolean>(loadingImage) {
@Override
public void onCustomSuccess(Boolean result) {
if (result == true) {
remove(login);
Cookies.setCookie("login", login.getProvidedLogin());
userInfoProxy.getUserInfo(new Loader<HashMap<String,String>>(loadingImage) {
@Override
public void onCustomFailure(Throwable caught) {
Window.alert("RPC Failure while getting user infos, refresh the page");
}
@Override
public void onCustomSuccess(HashMap<String, String> result) {
userInfo = result;
showMainPage();
}
});
}
else
login.showError("Login failed");
}
@Override
public void onCustomFailure(Throwable caught) {
Window.alert("RPC Failed, try reloading the page");
}
});
loadingImage.setVisible(false);
add(centerWidget);
}
/**
* Main Page (if user is logged in)
*/
private void showMainPage() {
mainPage = MainPage.getInstance();
mainPage.getElement().getStyle().setMarginRight(3, Unit.EM);
History.addValueChangeHandler(mainPage);
leftPanel = new MainPanel(userInfo);
addWest(leftPanel, 23);
add(new ScrollPanel(mainPage));
leftPanel.setVisible(true);
mainPage.setVisible(true);
animate(1500);
}
}